package logica;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import logica.persistencia.AtributoCompuestoPersistente;
import memento.IMemento;
import memento.MementoAtributoCompuestoLogico;


public class AtributoCompuesto extends Atributo{

	private List<Atributo> atributos;

	public AtributoCompuesto(String nombre) throws SinNombreException 
	{
		super(nombre);
		
		this.atributos = new LinkedList<Atributo>();
	}
	
	@Override
	public List<Atributo> getAtributos() {
		return this.atributos;
	}
	
	public void setAtributos(List<Atributo> atributos) {
		this.atributos = atributos;
	}
	
	@Override
	public void agregarAtributos(List<Atributo> atributos) throws AtributoRepetidoException 
	{
		Iterator<Atributo> iter = atributos.iterator();
		
		while (iter.hasNext()) 
			agregarAtributo(iter.next());
	}
	
	@Override
	public void agregarAtributo(Atributo atributo) throws AtributoRepetidoException 
	{
		verificarSiAtributoRepetido(atributo);
		this.atributos.add(atributo);
	}
	
	private void verificarSiAtributoRepetido(Atributo atributo) throws AtributoRepetidoException 
	{
		Iterator<Atributo> iteradorAtributo = atributos.iterator();
		
		while (iteradorAtributo.hasNext()) 
		{
			if (atributo.equals(iteradorAtributo.next()))
				throw new AtributoRepetidoException("Una entidad no puede tener atributos con el mismo nombre. Ver: " + atributo);
		}
	}
	
	public AtributoCompuestoPersistente getAtributoPersistente() {
		return new AtributoCompuestoPersistente(this);
	}

	@Override
	public IMemento getMementoEspecializado() {
		return new MementoAtributoCompuestoLogico(this);
	}
}
